/*! @File        : jointitem.h
 *  @Brief       : 简要说明
 *  @Details     : 详细说明
 *  @Author      : 毛辰飞
 *  @Date        : 2024-11-14 14:12:30
 *  @Version     : v1.0
 *  @Copyright   : Copyright By 毛辰飞, All Rights Reserved
 *
 **********************************************************
 *
 *  @Attention   :
 *  @par 修改日志:
 *  <table>
 *  <tr><th>Date       <th>Version   <th>Author    <th>Description
 *  <tr><td>2024-11-14 <td>1.0       <td>毛辰飞     <td>创建初始版本
 *  </table>
 *
 *********************************************************
 */
#ifndef JOINTITEM_H
#define JOINTITEM_H
#include <QString>
#include <QVector>
#include <QVariant>
#include <QDebug>
#include <QMap>
#include <QJsonObject>
/**
     * @introduce   关节分类
     * @author      毛辰飞
     * @data        2024/11/14
**/
enum JointType
{
    //关节位置
    JOINTTYPE_HEAD=0,
    JOINTTYPE_ARMS,
    JOINTTYPE_WAIST,
    JOINTTYPE_LEGS
};
struct HeadJointStruct{
    float fPosition;//当前位姿
    float fPositionExpecct;//期望位姿
    float fVocility;//当前速度
    float fVocilityExpecct;//期望速度
    float fCurrent;//当前电流
    float fCurrentExpecct;//期望电流
};
struct ArmJointStruct{
    float fPosition;//当前位姿
    float fPositionExpecct;//期望位姿
    float fVocility;//当前速度
    float fVocilityExpecct;//期望速度
    float fCurrent;//当前电流
    float fCurrentExpecct;//期望电流
};
struct WaistJointStruct{
    float fPosition;//当前位姿
    float fPositionExpecct;//期望位姿
    float fVocility;//当前速度
    float fVocilityExpecct;//期望速度
    float fCurrent;//当前电流
    float fCurrentExpecct;//期望电流
};
struct LegJointStruct{
    float fPosition;//当前位姿
    float fPositionExpecct;//期望位姿
    float fVocility;//当前速度
    float fVocilityExpecct;//期望速度
    float fCurrent;//当前电流
    float fCurrentExpecct;//期望电流
};
/**
     * @introduce   关节基类
     * @author      毛辰飞
     * @data        2024/11/14
**/
struct JointBase
{
    JointBase()=default;
    JointBase(const QString &sId,JointType type,QVariant value);
    virtual ~JointBase();
    virtual void UpdateData(const QVariant &variant)=0;
    virtual QJsonArray GetData() const=0;
    //关节编号（如arm_joint_1）
    QString m_strJointID;
    //关节类型（如JOINTTYPE_HEAD，表示头部关节）
    JointType m_eType;
    QVariant m_vValue;
};
/**
     * @introduce   头部关节
     * @author      毛辰飞
     * @data        2024/11/14
**/

struct HeadJoint:public JointBase
{
    HeadJoint()=default;
    HeadJoint(const QString &sId,JointType type,QVariant value);
    virtual ~HeadJoint();
    QJsonArray GetData() const override;
    // 更新当前参数
    void UpdateData(const QVariant &variant) override;
    HeadJointStruct headJointStruct;


};
/**
     * @introduce   上肢关节
     * @author      毛辰飞
     * @data        2024/11/14
**/
struct ArmJoint:public JointBase
{
    ArmJoint()=default;
    ArmJoint(const QString &sId,JointType type,QVariant value);
    virtual ~ArmJoint();
    QJsonArray GetData() const override;
    // 更新当前参数
    void UpdateData(const QVariant &variant) override;
    ArmJointStruct armJointStruct;
};
/**
     * @introduce   腰部关节
     * @author      毛辰飞
     * @data        2024/11/14
**/
struct WaistJoint:public JointBase
{
    WaistJoint()=default;
    WaistJoint(const QString &sId,JointType type,QVariant value);
    virtual ~WaistJoint();
    QJsonArray GetData() const override;
    // 更新当前参数
    void UpdateData(const QVariant &variant) override;
    WaistJointStruct waistJointStruct;

};
/**
     * @introduce   下肢关节信息
     * @author      毛辰飞
     * @data        2024/11/14
**/
struct LegJoint:public JointBase
{
    LegJoint()=default;
    LegJoint(const QString &sId,JointType type,QVariant value);
    virtual ~LegJoint();
    QJsonArray GetData() const override;
    // 更新当前参数
    void UpdateData(const QVariant &variant) override;
    LegJointStruct legJointStruct;
};
Q_DECLARE_METATYPE(HeadJointStruct);
Q_DECLARE_METATYPE(ArmJointStruct);
Q_DECLARE_METATYPE(WaistJointStruct);
Q_DECLARE_METATYPE(LegJointStruct);
#endif // JOINTITEM_H
